//邻接矩阵数据类型定义
#define MAXV 最大顶点个数
typedef char ElemType;
typedef struct
{
int no;
ElemType info;
}VertexType;
typedef struct
{
int edges[MAXV][MAXV];
int n,e;
VertexType vexs[MAXV];
}MGraph;
//邻接表的存储表示
typedef char ElemType;
typedef int InfoType;
typedef struct ANode
{
int adjvex;
struct ANode *nextarc;
InfoType info;
}ArcNode;
typedef struct Vnode
{
ElemType data;
ArcNode *firstarc;
}VNode;
typedef struct
{
VNode adjlist[MAXV];
int n,e;
}AGraph;
//连通图,邻接表,深度优先遍历
int visited[MAXV];
void DFS(AGraph *G,int v)
{
ArcNode *p;
visited[v]=1;
printf("%d ",v);
p=G->adjlist[v].firstarc;
while(p!=NULL)
{
if(visited[p->adjvex]==0)
DFS(G,p->adjvex);
p=p->nextarc;
}
}
//连通图,邻接表,广度优先遍历
void BFS(AGraph *G,int v)
{
ArcNode *p;
int queue[MAXV],front=0,rear=0;
int visited[MAXV];
int w,i;
for(i=0;i<G->n;i++)
visited[i]=0;
printf("%d ",v); //先访问,再入队
visited[v]=1;
rear=(rear+1)%MAXV;
queue[rear]=v;
while(front!=rear)
{
front=(front+1)%MAXV;
w=queue[front];
p=G->adjlist[w].firstarc;
while(p!=NULL)
{
if(visited[p->adjvex]==0)
{
printf("%d ",p->adjvex);
visited[p->adjvex]=1;
rear=(rear+1)%MAXV;
queue[rear]=p->adjvex;
}
p=p->nextarc;
}
}
printf("\n");
}
//非连通图,邻接表,深度优先遍历
DFS1(AGraph *G)
{
int i;
for(i=0;i<G->n;i++)
{
if(visited[i]==0)
DFS(G,i);
}
}
//非连通图,邻接表,广度优先遍历
BFS1(AGraph *G)
{
int i;
for(i=0;i<G->n;i++)
{
if(visited[i]==0)
BFS(G,i);
}
}
图的深度<-->广度 优先遍历
最新推荐文章于 2022-05-03 07:57:49 发布